package com.example.pattern.decorated;

/**
 * 装饰者模式
 *  1、不改变原有对象的情况下添加扩展功能
 *  2、不同的组合可以实现不同的效果
 *  3、符合开闭原则
 */
public class DecoratedTest {

    public static void main(String[] args) {
        Camera camera = new FilterDecorator(new BeautyDecorator(new CameraComponent()));
        camera.operation();
    }

}
interface Camera{
    void operation();
}

// 手机 相机
class CameraComponent implements Camera{
    @Override
    public void operation() {
        System.out.println("手机拍照.");
    }
}

/**
 * 装饰着
 */
abstract class Decorator implements Camera{
    Camera camera;

    public Decorator(Camera camera) {
        this.camera = camera;
    }
}
/**
 * 手机 美颜功能 装饰
 */
class BeautyDecorator extends Decorator{

    public BeautyDecorator(Camera camera) {
        super(camera);
    }

    @Override
    public void operation() {
        System.out.println("开启美颜");
        camera.operation();
    }
}
/**
 * 手机 滤镜功能 装饰
 */
class FilterDecorator extends Decorator{

    public FilterDecorator(Camera camera) {
        super(camera);
    }

    @Override
    public void operation() {
        System.out.println("开启滤镜");
        camera.operation();
    }
}


